﻿using AppForm_Managers.Object_Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AppForm_Managers.Views
{
    public partial class EmployeesFamilyRelations : Form
    {
        public EmployeesFamilyRelations()
        {
            InitializeComponent();
        }

        private void EmployeesFamilyRelations_Load(object sender, EventArgs e)
        {
            UseComboProvinces_DataLoad();

            AddButton.Enabled = true;
            UpdateButton.Enabled = false;
            DeleteButton.Enabled = false;

            LableCodeEmp.Text = "";
            LableCodeEmp.Visible = false;
            LableFullName.Text = "";
            LableFullName.Visible = false;
        }

        private void UseComboProvinces_DataLoad()
        {
            try
            {
                UseComboProvinces.DataSource = null;
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    List<Province> list = new List<Province>();

                    Province temp = new Province()
                    {
                        ProvID = 0,
                        NameOfProvince = "Lựa chọn"
                    };

                    list.Add(temp);
                    list.AddRange(db.Provinces);

                    UseComboProvinces.DataSource = list;
                    UseComboProvinces.DisplayMember = "NameOfProvince";
                    UseComboProvinces.ValueMember = "ProvID";
                    UseComboProvinces.SelectedIndex = 0;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboProvinces_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    District temp = new District()
                    {
                        DistID = 0,
                        NameOfDist = "Lựa chọn"
                    };

                    List<District> list = new List<District>();
                    list.Add(temp);

                    if (UseComboProvinces.SelectedIndex == 0)
                    {
                        UseComboDistricts.DataSource = list;
                        UseComboDistricts.ValueMember = "DistID";
                        UseComboDistricts.DisplayMember = "NameOfDist";
                        UseComboDistricts.SelectedIndex = 0;
                    }
                    else
                    {
                        int provinceID = int.Parse(UseComboProvinces.SelectedValue.ToString());
                        Province province = db.Provinces.SingleOrDefault(p => p.ProvID == provinceID);
                        list.AddRange(province.Districts.ToList());

                        UseComboDistricts.DataSource = list;
                        UseComboDistricts.ValueMember = "DistID";
                        UseComboDistricts.DisplayMember = "NameOfDist";
                        UseComboDistricts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboDistricts_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Commune temp = new Commune()
                    {
                        ComID = 0,
                        NameOfComm = "Lựa chọn"
                    };

                    List<Commune> list = new List<Commune>();
                    list.Add(temp);

                    if (UseComboDistricts.SelectedIndex == 0)
                    {
                        UseComboCommunes.DataSource = list;
                        UseComboCommunes.ValueMember = "ComID";
                        UseComboCommunes.DisplayMember = "NameOfComm";
                        UseComboCommunes.SelectedIndex = 0;
                    }
                    else
                    {
                        int districtID = int.Parse(UseComboDistricts.SelectedValue.ToString());
                        District district = db.Districts.SingleOrDefault(p => p.DistID == districtID);
                        list.AddRange(district.Communes.ToList());

                        UseComboCommunes.DataSource = list;
                        UseComboCommunes.ValueMember = "ComID";
                        UseComboCommunes.DisplayMember = "NameOfComm";
                        UseComboCommunes.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboCommunes_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Organization temp = new Organization()
                    {
                        OrgID = 0,
                        NameOfOrgan = "Lựa chọn"
                    };

                    List<Organization> list = new List<Organization>();
                    list.Add(temp);

                    if (UseComboCommunes.SelectedIndex == 0)
                    {
                        UseComboOgrans.DataSource = list;
                        UseComboOgrans.ValueMember = "OrgID";
                        UseComboOgrans.DisplayMember = "NameOfOrgan";
                        UseComboOgrans.SelectedIndex = 0;
                    }
                    else
                    {
                        int communeID = int.Parse(UseComboCommunes.SelectedValue.ToString());
                        Commune commune = db.Communes.SingleOrDefault(p => p.ComID == communeID);
                        list.AddRange(commune.Organizations.ToList());

                        UseComboOgrans.DataSource = list;
                        UseComboOgrans.ValueMember = "OrgID";
                        UseComboOgrans.DisplayMember = "NameOfOrgan";
                        UseComboOgrans.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboOgrans_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Department temp = new Department()
                    {
                        DepID = 0,
                        NameOfDep = "Lựa chọn"
                    };

                    List<Department> list = new List<Department>();
                    list.Add(temp);

                    if (UseComboOgrans.SelectedIndex == 0)
                    {
                        UseComboDeparts.DataSource = list;
                        UseComboDeparts.ValueMember = "DepID";
                        UseComboDeparts.DisplayMember = "NameOfDep";
                        UseComboDeparts.SelectedIndex = 0;
                    }
                    else
                    {
                        int organID = int.Parse(UseComboOgrans.SelectedValue.ToString());
                        Organization organ = db.Organizations.SingleOrDefault(p => p.OrgID == organID);
                        list.AddRange(organ.Departments.ToList());

                        UseComboDeparts.DataSource = list;
                        UseComboDeparts.ValueMember = "DepID";
                        UseComboDeparts.DisplayMember = "NameOfDep";
                        UseComboDeparts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboDeparts_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Employee temp = new Employee()
                    {
                        EmpID = 0,
                        FirstName = "Lựa chọn"
                    };

                    List<Employee> list = new List<Employee>();
                    list.Add(temp);

                    if (UseComboDeparts.SelectedIndex == 0)
                    {
                        ComboEmployee.DataSource = list;
                        ComboEmployee.ValueMember = "EmpID";
                        ComboEmployee.DisplayMember = "FirstName";
                        ComboEmployee.SelectedIndex = 0;
                    }
                    else
                    {
                        int departID = int.Parse(UseComboDeparts.SelectedValue.ToString());
                        Department emp = db.Departments.SingleOrDefault(p => p.DepID == departID);
                        list.AddRange(emp.Employees1.ToList());

                        ComboEmployee.DataSource = list;
                        ComboEmployee.ValueMember = "EmpID";
                        ComboEmployee.DisplayMember = "FirstName";
                        ComboEmployee.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ComboEmployee_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Controls_Reset();
                    if (ComboEmployee.SelectedIndex == 0)
                    {
                        ViewGroupBox.Visible = false;
                    }
                    else
                    {
                        int empid = Int32.Parse(ComboEmployee.SelectedValue.ToString());
                        Employee emp = db.Employees.Single(em => em.EmpID == empid);
                        LableCodeEmp.Text = emp.Code;
                        LableCodeEmp.Visible = true;
                        LableFullName.Text = String.Format("{0} {1}", emp.FirstName, emp.LastName);
                        LableFullName.Visible = true;
                        Genderlabel.Visible = true;
                        if (bool.Parse(emp.Gender.ToString()))
                            Genderlabel.Text = "Nam";
                        else
                            Genderlabel.Text = "Nữ";
                        LableEmail.Text = emp.Email;
                        LablePhone.Text = emp.Telephone;

                        string avatarUrl = String.Format(@"{0}Uploads\{1}", Ultis_Code.FindSystemUrl.getDefaultURL(), emp.AvatarUrl);
                        Bitmap bm = new Bitmap(avatarUrl);
                        PictureBoxAvata.Image = bm;
                        PictureBoxAvata.SizeMode = PictureBoxSizeMode.StretchImage;

                        ViewGroupBox.Visible = true;
                    }
                    GridEmpRelationsFamily_DataLoad();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void GridEmpRelationsFamily_DataLoad()
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    if (ComboEmployee.SelectedIndex == 0)
                        GridEmpRelationsFamily.DataSource = null;
                    else
                    {
                        int empid = Int32.Parse(ComboEmployee.SelectedValue.ToString());
                        Employee emp = db.Employees.Single(em => em.EmpID == empid);
                        GridEmpRelationsFamily.DataSource = emp.FamilyRelationships.ToList();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ViewEmpRelationsFamily_Click(object sender, EventArgs e)
        {
            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            try
            {
                ErrorProvider.Dispose();
                int frID = 0;
                List<int> listSelected = ViewEmpRelationsFamily.GetSelectedRows().ToList<int>();
                int index = -1;
                foreach (var item in listSelected)
                {
                    if (item > -1)
                    {
                        index = item;
                        break;
                    }
                }
                UpdateButton.Enabled = true;
                DeleteButton.Enabled = true;
                AddButton.Enabled = false;

                frID = Int32.Parse(ViewEmpRelationsFamily.GetRowCellValue(index, "FaReID").ToString());
                FamilyRelationship fr = db.FamilyRelationships.Single(f => f.FaReID == frID);

                UseComboProvinces.SelectedValue = fr.Employee.Department1.Organization.Commune.District.ProvID;
                UseComboDistricts.SelectedValue = fr.Employee.Department1.Organization.Commune.DistID;
                UseComboCommunes.SelectedValue = fr.Employee.Department1.Organization.ComID;
                UseComboOgrans.SelectedValue = fr.Employee.Department1.OrgID;
                UseComboDeparts.SelectedValue = fr.Employee.DepUsingID;
                ComboEmployee.SelectedValue = fr.EmpID;

                if (bool.Parse(fr.TypeRelation.ToString()))
                    RadianPerson.Checked = true;
                else
                    RadianOther.Checked = true;

                RelationText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "NameOfRela").ToString();
                FullNameText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "FullOfName").ToString();
                BirthText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "YearOfBirth").ToString();
                HomeTownText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "HomeTown").ToString();
                NamOfJobText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "NamOfJob").ToString();
                PlaceOfWorkText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "PlaceOfWork").ToString();
                CurrentAddressText.Text = ViewEmpRelationsFamily.GetRowCellValue(index, "CurrentAddress").ToString();
                CheckStatus.Checked = bool.Parse(ViewEmpRelationsFamily.GetRowCellValue(index, "TrainStatus").ToString());
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void AddButton_Click(object sender, EventArgs e)
        {
            if (ComboEmployee.SelectedIndex == 0)
            {
                ErrorProvider.SetError(ComboEmployee, "Hãy chọn nhân viên cần bổ xung thông tin");
                ComboEmployee.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (RelationText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(RelationText, "Hãy nhập tên mối quan hệ của nhân viên");
                RelationText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (FullNameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(FullNameText, "Hãy nhập tên của người liên quan");
                FullNameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (BirthText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(BirthText, "Hãy nhập ngày sinh");
                BirthText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (NamOfJobText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NamOfJobText, "Hãy nhập nghề nghiệp của người liên quan");
                NamOfJobText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (PlaceOfWorkText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(PlaceOfWorkText, "Hãy nhập đơn vị công tác của người liên quan");
                PlaceOfWorkText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (HomeTownText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(HomeTownText, "Hãy nhập quê quán của người liên quan");
                HomeTownText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CurrentAddressText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CurrentAddressText, "Hãy nhập nơi ở hiện nay của người liên quan");
                CurrentAddressText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    FamilyRelationship fr = new FamilyRelationship()
                    {
                        EmpID = Int32.Parse(ComboEmployee.SelectedValue.ToString()),
                        NameOfRela = RelationText.Text.Trim(),
                        FullOfName = FullNameText.Text.Trim(),
                        YearOfBirth = DateTime.Parse(BirthText.Text.Trim()),
                        HomeTown = HomeTownText.Text.Trim(),
                        NamOfJob = NamOfJobText.Text.Trim(),
                        PlaceOfWork = PlaceOfWorkText.Text.Trim(),
                        CurrentAddress = CurrentAddressText.Text.Trim(),
                        TrainStatus = CheckStatus.Checked
                    };

                    if (RadianPerson.Checked)
                        fr.TypeRelation = true;
                    else
                        fr.TypeRelation = false;

                    db.FamilyRelationships.Add(fr);
                    db.SaveChanges();

                    GridEmpRelationsFamily_DataLoad();
                    //GridEmpRelationsFamily_Load(sender, e);
                    Controls_Reset();

                    EmployeesFamilyRelations appear = new EmployeesFamilyRelations();
                    AlertControl.Show(appear, "Hệ thống thông báo", "Thêm thông tin mối quan hệ cán bộ nhân viên thành công");
                    //MessageBox.Show("Thêm thông tin mối quan hệ cán bộ nhân viên thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UpdateButton_Click(object sender, EventArgs e)
        {
            if (ComboEmployee.SelectedIndex == 0)
            {
                ErrorProvider.SetError(ComboEmployee, "Hãy chọn nhân viên cần bổ xung thông tin");
                ComboEmployee.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (RelationText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(RelationText, "Hãy nhập tên mối quan hệ của nhân viên");
                RelationText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (FullNameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(FullNameText, "Hãy nhập tên của người liên quan");
                FullNameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (BirthText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(BirthText, "Hãy nhập ngày sinh");
                BirthText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (NamOfJobText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NamOfJobText, "Hãy nhập nghề nghiệp của người liên quan");
                NamOfJobText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (PlaceOfWorkText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(PlaceOfWorkText, "Hãy nhập đơn vị công tác của người liên quan");
                PlaceOfWorkText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (HomeTownText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(HomeTownText, "Hãy nhập quê quán của người liên quan");
                HomeTownText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CurrentAddressText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CurrentAddressText, "Hãy nhập nơi ở hiện nay của người liên quan");
                CurrentAddressText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    List<int> listSelected = ViewEmpRelationsFamily.GetSelectedRows().ToList<int>();
                    int index = -1;
                    foreach (var item in listSelected)
                    {
                        if (item > -1)
                        {
                            index = item;
                            break;
                        }
                    }
                    int frID = Int32.Parse(ViewEmpRelationsFamily.GetRowCellValue(index, "FaReID").ToString());
                    FamilyRelationship fr = db.FamilyRelationships.Single(f => f.FaReID == frID);

                    if (RadianPerson.Checked)
                        fr.TypeRelation = true;
                    else
                        fr.TypeRelation = false;

                    fr.NameOfRela = RelationText.Text.Trim();
                    fr.FullOfName = FullNameText.Text.Trim();
                    fr.YearOfBirth = DateTime.Parse(BirthText.Text.Trim());
                    fr.NamOfJob = NamOfJobText.Text.Trim();
                    fr.PlaceOfWork = PlaceOfWorkText.Text.Trim();
                    fr.HomeTown = HomeTownText.Text.Trim();
                    fr.CurrentAddress = CurrentAddressText.Text.Trim();
                    fr.TrainStatus = CheckStatus.Checked;
                    if (MessageBox.Show("Bạn có muốn cập nhật thông tin?", "Cập nhật thông tin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {
                        db.SaveChanges();
                        GridEmpRelationsFamily_DataLoad();
                        Controls_Reset();

                        EmployeesFamilyRelations appear = new EmployeesFamilyRelations();
                        AlertControl.Show(appear, "Hệ thống thông báo", "Cập nhật thông tin mối quan hệ cán bộ nhân viên thành công");
                        //MessageBox.Show("Cập nhật thông tin mối quan hệ cán bộ nhân viên thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void DeleteButton_Click(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    List<int> listSelected = ViewEmpRelationsFamily.GetSelectedRows().ToList<int>();
                    int index = -1;
                    foreach (var item in listSelected)
                    {
                        if (item > -1)
                        {
                            index = item;
                            break;
                        }
                    }
                    int frID = Int32.Parse(ViewEmpRelationsFamily.GetRowCellValue(index, "FaReID").ToString());
                    FamilyRelationship fr = db.FamilyRelationships.Single(f => f.FaReID == frID);
                    db.FamilyRelationships.Remove(fr);

                    if ((MessageBox.Show("Bạn có muốn xóa mối quan hệ này không?", "Xóa mối quan hệ", MessageBoxButtons.YesNo, MessageBoxIcon.Stop)) == System.Windows.Forms.DialogResult.Yes)
                    {
                        db.SaveChanges();
                        GridEmpRelationsFamily_DataLoad();
                        Controls_Reset();

                        EmployeesFamilyRelations appear = new EmployeesFamilyRelations();
                        AlertControl.Show(appear, "Hệ thống thông báo", "Xóa thông tin mối quan hệ cán bộ nhân viên thành công");
                        //MessageBox.Show("Xóa thông tin mối quan hệ cán bộ nhân viên thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void CancelsButton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn muốn hủy bỏ thao tác và làm mới", "Hủy bỏ thao tác", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
            {
                ErrorProvider.Dispose();
                Controls_Reset();
                GridEmpRelationsFamily_DataLoad();
                UseComboProvinces.SelectedIndex = 0;
            }
        }

        private void Controls_Reset()
        {
            RadianPerson.Checked = true;
            RelationText.Text = "";
            FullNameText.Text = "";
            BirthText.Text = "";
            NamOfJobText.Text = "";
            PlaceOfWorkText.Text = "";
            HomeTownText.Text = "";
            CurrentAddressText.Text = "";
            CheckStatus.Checked = false;

            AddButton.Enabled = true;
            UpdateButton.Enabled = false;
            DeleteButton.Enabled = false;
        }
    }
}